perm filename USERS.SAI[PUB,TES]1 blob
sn#129311 filedate 1974-11-07 generic text, type T, neo UTF8
00100 BEGOF("USERS")
00200
00300 COMMENT
00400
00500 *** Variations at Different Sites are Extensive ***
00600
00700 User interactions at startup and DEBUG times.
00800
00900 ;
01000
01300 IFC TENEX THENC
01400
01500 DEFINE SUBCMDS= [11]; COMMENT NOT COUNTING ? AND CR ;
01600 DEFINE DCASE= [1], XCASE= [2], TCASE= [3], MCASE= [4],
01700 PCASE= [5], SCASE= [6],
01800 YCASE= [7], NCASE= [8], ACASE= [9],
01900 BCASE= [10], HCASE= [11],
02000 QUESTCASE= [12], CRCASE= [13]; COMMENT ALWAYS LAST TWO ;
02100 PRELOAD!WITH "ERROR", "DOCUMENT: ", "XGP", "TTY",
02150 IFCR PARCVER THENC PARCMNEMONIC ELSEC "MIC" ENDC,
02200 "PRINT DEBUG INFO", "SPREAD=",
02300 "YES", "NO", "ASK", "BIG", "HUGE" ;
02400 OWN STRING ARRAY COMPLETION[0:SUBCMDS] ;
02500 PRELOAD!WITH "ERROR", "(OUTPUT FILE NAME)", "PRINT DEVICE",
02600 "PRINT DEVICE (DEFAULT)", "PRINT DEVICE",
02700 "(LINE NUMBERS AND ERRORS) IN MARGIN OF DOCUMENT",
02800 "1 TO 9 (DEFAULT IS 1=SINGLE SPACE)",
02900 "DO DELETE INTERMEDIATE FILES (DEFAULT)",
03000 "DONT DELETE INTERMEDIATE FILES",
03100 "TO DELETE INTERMEDIATE FILES",
03200 "SYMBOL TABLE", "SYMBOL TABLE" ;
03300 OWN STRING ARRAY EXPLANATION[0:SUBCMDS] ;
03400
03500 ENDC
03600
03700 PROCEDURES
03800
03900 IFCR CMUVER THENC
04000 REQUIRE "PUBTMP.SAI" SOURCE!FILE ;
04100 COMMENT RUNPROG, READTMPCOR, ETC. ;
04200 ENDC
00100 PUBLIC SIMPLE PROCEDURE USERS! ;$"#
00200 BEGIN "USERS!"
00300
00400 IFC TENEX THENC
00500 JOBNO ← CVS(GJINF(J, I, J)) ;
00600 CONDIR ← DIRST(I) ;
00700 ENDC TES 10/25/73 ;
00800
00900 DOPASS3←FALSE; RKJ: 1-4-74;
01000 ERRLF←FALSE; RKJ 6/25/74 ;
01100 DEBUGFLAG ← -1 ; TES 8/21/74 ;
01200
01300 IFC CMUVER THENC
01400 LIBPPN ← "[A700PU00]";
01500 ENDC COMMENT RKJ 10-10-73;
01600
01700 IFC SAILVER THENC
01800 LIBPPN ← IF EQU(CVXSTR(CALL(0,"DSKPPN"))[4 TO 6], "TES") THEN NULL ELSE "[1,3]" ;
01900 ENDC
02000
02100 IFC ITSVER THENC PJ 5/27/74;
02200 LIBPPN ← " COMMON;" ; PJ 5/28/74 THE SPACE IS SIGNIFICNAT ;
02300 ENDC
02400
02500 IFC TENEX THENC LIBPPN ← IF EQU(CONDIR,"PUB") THEN "<PUB>" ELSE "<SUBSYS>" ; ENDC
02600
02700 END "USERS!" ;
00100 IFSITE NOT TENEX THENK
00200
00300 PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE ANYSTART(STRING COMDLINE) ;$"#
00400 BEGIN "ANYSTART"
00500 STRING OPTIONS, N, M ;
00550 INTEGER EXT, PPN ;
00600 IFC ITSVER PJ 5/28/74 ;
00700 THENC SETBREAK(1, "←/()", CR&LF&FF, "INS")
00800 ELSEC SETBREAK(1, "←/()", CR&LF&TB&FF&SP, "INS") ENDC ;
00900 SETBREAK(4, ":", NULL, "IS") ; RKJ: 5-17-74 ;
01000 SETBREAK(2, DIGS, SP, "XNS") ;
01100 SETBREAK(3, ".[", NULL, "INR") ;
01200 OUTFILE ← SCAN(COMDLINE, 1, BRC) ;
01300 IF BRC NEQ "←" THEN BEGIN INFILE ← OUTFILE ; OUTFILE ← NULL END
01400 ELSE INFILE ← SCAN(COMDLINE, 1, BRC) ; TES 8/14/74 SIMPLIFIED;
01500 RKJ: 26-Sep-74 - CCL linkages;
01600 IFC CMUVER THENC
01700 IF INFILE[∞ FOR 1]="!" THEN
01720 BEGIN
01740 RUNPROG(INFILE[1 TO ∞-1],1); RKJ: fixed 7-Nov-74;
01760 START!CODE CALLI 0,'12 END;
01780 END;
01800 ENDC
01900 INCHAN ← OPENTOREAD(NULL, "Manuscript ", INFILE, PUBEXT, NULL) ;
02000 IFILENAME ← CVXSTR(CVFIL(INFILE, EXT, INPPN)) ;
02050 FULLFILE ← INFILE ; TES TEMPORARY 10/15/74 ;
02100 IF NULSTR(OUTFILE) THEN
02200 BEGIN
02300 OUTFILE ← IFILENAME ;
02400 GENREXT ← TRUE ;
02500 END
02600 ELSE BEGIN
02700 CVFIL(OUTFILE, EXT, PPN) ;
02800 GENREXT ← EXT=0 ;
02900 END ;
03000 TMPFILE ← IFILENAME & RPGEXT ;
03100 WHILE BRC="/" DO OPTIONS ← OPTIONS & SCAN(COMDLINE,1,BRC) ;
03200 IF BRC = "(" THEN DO OPTIONS ← OPTIONS & SCAN(COMDLINE,1,BRC) & (IF BRC="/" THEN BRC ELSE NULL)
03300 UNTIL BRC = 0 OR BRC = ")";
03400 IF FULSTR(OPTIONS) THEN
03500 DO BEGIN
03600 N ← SCAN(OPTIONS, 2, BRC) ;
03700 IF "a" LEQ BRC LEQ "z" THEN BRC←BRC-'40; RKJ: 5-10-74 ;
03800 RKJ: 5-10-74 got rid of all lower case below ;
03900 IF BRC = "D" THEN DEBUG ← -1
04000 ELSE IF BRC = "S" THEN PREFMODE ← IF NULSTR(N) THEN 1 ELSE CVD(N)
04100 ELSE IF BRC = "M" THEN DEVICE ← -MIC
04200 ELSE IF BRC = "T" THEN DEVICE ← -TTY
04300 ELSE IF BRC = "L" THEN DEVICE ← -LPT
04400 ELSE IF BRC = "X" THEN DEVICE ← -XGP RKJ;
04500 ELSE IF BRC="N" OR BRC="Y" OR BRC="A" THEN DELINT ← BRC
04600 ELSE IF BRC = "B" THEN SYMNO ← BIG!SIZE - 1
04700 ELSE IF BRC = "H" THEN SYMNO ← HUGE!SIZE - 1
04800 ELSE IF BRC = "P" AND OPTIONS = "U" THEN
04900 OPTIONS ← OPTIONS[3 TO ∞] COMMENT /PUB ;
05000 ELSE IF BRC NEQ 0 THEN EARLYWARNING("Never heard of a " & BRC & " option") ;
05100 END
05200 UNTIL BRC = 0 ;
05300 FOR DUMMY←1 THRU 4 DO BREAKSET(DUMMY, NULL, "O") ; RKJ: 5-17-74 ;
05400 END "ANYSTART" ;
05500
05600 ENDC
00100 PUBLIC SIMPLE PROCEDURE DBURP ;$"#
00200 BEGIN TES 8/19/74 DEBUG PRINTOUTS ;
00300 BOOLEAN VERBOSE ; INTEGER I ;
00400 IF ON AND NOT SWDBACK THEN BEGIN OUTSTR(CRLF); SWDBACK←TRUE END ;
00500 PASS ;
00600 IF ITS(INPUT) THEN
00700 BEGIN
00800 PASS ;
00900 VERBOSE ← IF ITS(VERBOSE) THEN IPASS(TRUE) ELSE FALSE ;
01000 IF ON THEN BURPINPUT(VERBOSE) ;
01100 END
01200 ELSE IF ITS(AREAS) THEN
01300 BEGIN
01400 PASS ;
01500 VERBOSE ← IF ITS(VERBOSE) THEN IPASS(TRUE) ELSE FALSE ;
01600 IF ON THEN BURPAREAS(VERBOSE) ;
01700 IF STATUS>-1 AND COMMENT EVEN IF NOT ON, CHECK ;
01800 (WHATIS(THISAREA) NEQ AREAIDA OR WHATIS(AA) NEQ AAA OR
01900 (I←DEFA) AND I NEQ AREAIXM)
02000 THEN WARN(NULL,"ARRAYS AND IDAS DISAGREE: PUB BUG!" & CRLF) ;
02100 END
02200 ELSE WARN(NULL, "Unrecognized BURP command " & THISWD) ;
02300 END "DBURP" ;
00100 PUBLIC SIMPLE PROCEDURE DPUB!DEBUG ;$"#
00200 IF NOT ON THEN PASS ELSE
00300 BEGIN "BUGLOOP"
00400 STRING INPT ;
00500 IF FULSTR(INPT←TYPEIN) THEN
00600 BEGIN
00700 SWICH("TTY←" & SUBST(SUBST(INPT,TB,SP,SP),
00800 CRLF&"##", ";"&CRLF&TB, CRLF&TB) & TES 8/23&25/74;
00900 (CRLF & TB & TB & "PUB!DEBUG" & CRLF & TB & TB),
01000 -1, 0) ;
01100 PASS ;
01200 END
01300 ELSE PASS ;
01400 END "BUGLOOP" ;
00100 IFSITE TENEX THENK
00200
00300 PRIVATE SITE(TENEX) SIMPLE INTEGER PROCEDURE ININTEGER(INTEGER NUMBER) ;$"#
00400 BEGIN
00500 INTEGER N, I ;
00600 I ← -1 ;
00700 DO BEGIN
00800 N ← INCHRW ;
00900 IF N="?" THEN
01000 BEGIN
01100 OUTSTR(EXPLANATION[NUMBER]) ;
01200 N ← IF I<0 THEN INCHRW ELSE RUBOUT ;
01300 END ;
01400 IF N=ALTMODE OR N=EOL OR N=SP THEN
01500 BEGIN
01600 IF I<0 THEN OUTSTR(CVS(I←1)) ;
01700 IF N NEQ EOL THEN OUTSTR(CRLF) ;
01800 RETURN(I) ;
01900 END ;
02000 IF "1" LEQ N AND N LEQ "9" THEN
02100 I ← IF I<0 THEN N-"0" ELSE 10*I+(N-"0")
02200 ELSE BEGIN OUTSTR("XXX"&CRLF) ; RETURN(-1) END ;
02300 END
02400 UNTIL FALSE ;
02500 END "ININTEGER" ;
02600
02700 ENDC
00100 IFSITE NOT TENEX THENK
00200
00300 PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE RPGSTART ;$"#
00400
00500 IFC CMUVER THENC
00600
00800 BEGIN "RPGSTART"
00900 STRING CMD,OTHER!CMDS; LABEL NORPG;
01000 IF NOT RTMPFILE("PUB",OTHER!CMDS,TRUE,TRUE) THEN
01100 NORPG: BEGIN RPGSW←FALSE; SSTART; RETURN END;
01200 SETBREAK(1,LF,CR,"IS");
01300 DO CMD←SCAN(OTHER!CMDS,1,DUMMY) UNTIL (FULSTR(CMD) OR NULSTR(OTHER!CMDS));
01400 IF NULSTR(CMD) THEN GO NORPG;
01500 IF FULSTR(OTHER!CMDS) THEN WTMPFILE("PUB",OTHER!CMDS,TRUE);
01600 OTHER!CMDS←NULL;
01700 ANYSTART(CMD);
01800 OUTSTR("PUB: ");
01900 CMD←NULL;
02000 END "RPGSTART" ;
06800
06900 ELSEC
07000
07100 BEGIN "RPGSTART"
07200 STRING CMD ;
07300 EOF ← 0 ; OPEN(0, "DSK", 0, 1, 0, 50, BRC, EOF) ;
07400 LOOKUP(0, "QQPUB"&RPGEXT, FLAG) ; TES 8/14/74 SIMPLIFIED ;
07500 IF FLAG THEN EARLYWARNING("RPG PROBLEM: QQPUB.RPG NONEXISTENT") ;
07600 SETBREAK(1, LF, CR, "INS") ;
07700 CMD ← INPUT(0,1) ;
07800 ANYSTART(CMD) ; RELEASE(0) ;
07900 END "RPGSTART" ;
08000
08100 ENDC
08200
08300 ENDC
00100 IFSITE CMUVER THENK
00200
00300 PUBLIC SITE(CMUVER) SIMPLE PROCEDURE RUNLIBPROG(STRING FILENAME) ;$"#
00400 RUNPROG(LIBDEV & ":" & FILENAME & LIBPPN, 1) ;
00500
00600 ENDC
00100 IFSITE NOT TENEX THENK
00200
00300 PUBLIC SITE(NOT TENEX) SIMPLE PROCEDURE SSTART ;$"#
00400 BEGIN "SSTART"
00500 STRING S ;
00600 DO BEGIN OUTCHR("*"); S←INCHWL; END UNTIL FULSTR(S);
00700 ANYSTART(S);
00800 END "SSTART";
00900
01000 ENDC
00100 IFSITE TENEX THENK
00200
00300 PRIVATE SITE(TENEX) SIMPLE BOOLEAN PROCEDURE SUBCOMMAND(INTEGER NUMBER) ;$"#
00400 BEGIN
00500 INTEGER N ;
00600 OUTSTR(COMPLETION[NUMBER][2 TO ∞]) ;
00700 N ← INCHRW ;
00800 IF N="?" OR N=ALTMODE THEN
00900 BEGIN
01000 OUTSTR(SP & EXPLANATION[NUMBER]) ;
01100 N ← INCHRW ;
01200 END ;
01300 IF N=CR OR N=EOL THEN RETURN(TRUE) ;
01400 IF N=ALTMODE OR N=SP THEN
01500 BEGIN OUTSTR(CRLF) ; RETURN(TRUE) ; END ;
01600 OUTSTR("XXX"&CRLF) ; RETURN(FALSE) ;
01700 END "SUBCOMMAND" ;
01800
01900 ENDC
00100 PRIVATE SIMPLE STRING PROCEDURE SUBST(STRING STR, OLDS, NEWFIRST, NEWREST) ;$"#
00200 BEGIN TES 8/23/74 FOR PUB!DEBUG AT LEAST ;
00300 INTEGER WHICH ; TES 8/23/74 ;
00400 STRING S ;
00500 S ← NULL ; WHICH ← 0 ;
00600 WHILE FULSTR(STR) DO
00700 IF EQU(STR[1 TO LENGTH(OLDS)], OLDS) THEN
00800 BEGIN
00900 S ← S & (IF (WHICH←WHICH+1)=1 THEN NEWFIRST ELSE NEWREST) ;
01000 STR ← STR[LENGTH(OLDS)+1 TO ∞] ;
01100 END
01200 ELSE S ← S & LOP(STR) ;
01300 RETURN(S) ;
01400 END "SUBST" ;
00100 IFSITE TENEX THENK
00200
00300 PUBLIC SITE(TENEX) SIMPLE PROCEDURE TENEXSTART ;$"#
00400 BEGIN
00450 INTEGER THECHR ; TES 10/22/74 PREFER <CR> AFTER <COMMA> ;
00500 INTEGER N ; BOOLEAN DUN ;
00600 PRELOAD!WITH
00700 [13]0, CRCASE, [17]0, CRCASE,
00800 [31]0, QUESTCASE,
00900 0, ACASE, BCASE, 0, DCASE, 0, 0, 0,
01000 HCASE, 0, 0, 0, 0, MCASE, NCASE, 0,
01100 PCASE, 0, 0, SCASE, TCASE, 0, 0, 0,
01200 XCASE, YCASE, 0, [5]0,
01300 0, ACASE, BCASE, 0, DCASE, 0, 0, 0,
01400 HCASE, 0, 0, 0, 0, MCASE, NCASE, 0,
01500 PCASE, 0, 0, SCASE, TCASE, 0, 0, 0,
01600 XCASE, YCASE, 0, [5]0 ;
01700 OWN INTEGER ARRAY CNVCASE[0:127] ;
01750 IFCR PARCVER THENC PARCASE ; ENDC
01800 OUTFILE ← NULL ;
01900 DO BEGIN "GTINCHAN" TES 6/11/74 ;
02000 OUTSTR("MANUSCRIPT: ") ;
02100 WHILE -1 = (INCHAN ←
02200 GTJFNL(NULL, '162000000000, '100000101,
02300 NULL, NULL, NULL, "PUB", NULL, NULL, NULL)) DO
02400 OUTSTR(" ?" & CRLF & "MANUSCRIPT: ") ;
02500 OPENF(INCHAN, 2) ;
02600 IF !SKIP! THEN
02700 BEGIN
02800 OUTSTR("CAN'T OPEN MANUSCRIPT; IS PROTECTION OK?"&CRLF) ;
02900 RLJFN(INCHAN) ;
03000 END
03100 ELSE DONE ;
03200 END "GTINCHAN"
03300 UNTIL FALSE ;
03400 INFILE ← JFNS(INCHAN, 0) ;
03450 FULLFILE ← JFNS(INCHAN, '211110040001) ; TES 10/15/74 ;
03500 INPPN ← JFNS(INCHAN, '10000000001) ;
03600 IFILENAME ← JFNS(INCHAN, '1000000000) ;
03700 EOF ← 0 ; SETINPUT(INCHAN, 150, BRC, EOF) ;
03800 DUN ← FALSE ;
03900 BKJFN('100) ; COMMENT WAS THE CONFIRM WITH A COMMA? ;
04000 IF CHARIN('100) = "," THEN
04100 BEGIN "SUBCOMMANDS"
04200 IF (THECHR←INCHRW)=EOL THEN THECHR←0 ELSE OUTSTR(CRLF) ;
04300 DO BEGIN
04400 OUTSTR("@@") ;
04500 CASE CNVCASE[IF THECHR THEN THECHR ELSE INCHRW] OF
04600 BEGIN
04700 [0] OUTSTR("?"&CRLF) ;
04800 [DCASE] BEGIN
04900 OUTSTR(COMPLETION[DCASE][2 TO ∞]) ;
05000 N ← GTJFNL(NULL, '462000000000,
05100 '100000101, NULL, NULL, IFILENAME,
05200 "DOC", NULL, NULL, NULL) ;
05300 IF N=-1 THEN OUTSTR("XXX"&CRLF)
05400 ELSE BEGIN
05500 OUTFILE ← JFNS(N, 0) ;
05600 RLJFN(N) ; OUTSTR(CRLF) ;
05650 GENREXT ← FALSE ;
05700 END ;
05800 END ;
05900 [XCASE] IF SUBCOMMAND(XCASE) THEN DEVICE←-XGP ;
06000 [TCASE] IF SUBCOMMAND(TCASE) THEN DEVICE←-TTY ;
06100 [MCASE] IF SUBCOMMAND(MCASE) THEN DEVICE←-MIC ;
06600 [PCASE] IF SUBCOMMAND(PCASE) THEN DEBUG←-1 ;
06700 [SCASE] BEGIN
06800 OUTSTR(COMPLETION[SCASE][2 TO ∞]) ;
06900 IF (N←ININTEGER(SCASE))>0 THEN PREFMODE←N ;
07000 END ;
07100 [YCASE] IF SUBCOMMAND(YCASE) THEN DELINT←"Y" ;
07200 [NCASE] IF SUBCOMMAND(NCASE) THEN DELINT←"N" ;
07300 [ACASE] IF SUBCOMMAND(ACASE) THEN DELINT←"A" ;
07400 [BCASE] IF SUBCOMMAND(BCASE) THEN SYMNO←BIG!SIZE-1 ;
07500 [HCASE] IF SUBCOMMAND(HCASE) THEN SYMNO←HUGE!SIZE-1 ;
07600 [QUESTCASE]
07700 BEGIN
07800 OUTSTR("PUB SUBCOMMANDS ARE:"&CRLF) ;
07900 FOR N ← 1 THRU SUBCMDS DO
08000 OUTSTR(" "&COMPLETION[N] & SP &
08100 EXPLANATION[N] & CRLF) ;
08200 OUTSTR("CR AFTER EACH, CR AT END"&CRLF) ;
08300 END ;
08400 [CRCASE] DUN ← TRUE
08500 END ;
08550 THECHR ← 0 ;
08600 END
08700 UNTIL DUN ;
08800 END "SUBCOMMANDS" ;
08900 XCRIBL ← DEVICE = -XGP ;
09000 IF NULSTR(OUTFILE) THEN
09050 BEGIN TES 10/22/74 ;
09075 OUTFILE ← IFILENAME ;
09087 GENREXT ← TRUE ;
09093 END ;
09200 END "TENEXSTART" ;
09300
09400 ENDC
00100 FINISHED
00200
00300 ENDOF("USERS")